package com.haidong.string;

public class StringDemo {
    public static void main(String[] args) {
        //String类其实是不可变字符串类型,虽然String对象不可变,变量名可以变,配合上垃圾回收机制完成可变操作
        String name = "王海东";//局部变量名在栈里,但是字符串对象在堆里面
        name += "是你";
        name += "爸爸";
        System.out.println(name);

        //创建String对象常用方法
        //1.直接用双引号
        String str1 = "这是个字符串";
        //2.public String():创建一个空的字符串(基本不用)
        //3.public String(String):用字符串初始化,基本不用
        //4.public String(char[] c):根据字符数组的内容来初始化对象,起到拼接字符数组的作用
        char[] chars = {'我','是','你','爹'};
        System.out.println(new String(chars));
        //5.public String(byte[] b):根据字节数组的内容,来创建字符串对象(把字节码对应的字符连起来)
        byte[] bytes = {97,98,99,65,66,67};
        String str2 = new String(bytes);
        System.out.println(str2);

        //以""创建的字符串存放在堆中的常量存储池中,相同的内容不会创建第二次
        String str3 = "123";
        String str4 = "123";
        if(str3==str4){
            System.out.println("这两个字符串变量的地址是相同的");
        }
        //这两个str变量指的是同一个地址
        //用String()构造器new出来的会在堆中申请内存,即使内容一样也会申请新内存
        String str5 = new String(str3);
        String str6 = new String(str3);
        if(str5==str6){
            System.out.println("这两个字符串变量的地址是相同的");
        }
        else{
            System.out.println("但是这俩地址不同");
        }
    }
}
